import Message from './Message'
import { IOption, IError } from '../types/base'
class ErrorClass {
	/**
	 * 定义错误对象
	 */
	public msgMap = {
		302: '接口重定向了！',
		400: '参数不正确！',
		401: '您未登录，或者登录已经超时，请先登录！',
		403: '您没有权限操作！',
		404: '请求地址出错',
		408: '请求超时！',
		409: '系统已存在相同数据！',
		500: '服务器内部错误！',
		501: '服务未实现！',
		502: '网关错误！',
		503: '服务不可用！',
		504: '服务暂时无法访问，请稍后再试！',
		505: 'HTTP版本不受支持！',
	}

	/**
	 * 错误处理 - 状态码级别
	 *
	 * @param {error}
	 * @memberof ErrorClass
	 */
	errorHandle(error: IError) {
		// 处理被取消的请求
		if (error?.constructor?.name === 'Cancel') {
			return
		}
		let msg = ''
		if (error?.response) {
			const { statusText, status } = error.response
			msg = statusText || this.msgMap[status] || '异常问题，请联系管理员！'
		}
		if (error.message.includes('timeout')) {
			msg = '网络请求超时！'
		}
		if (error.message.includes('Network')) {
			msg = window.navigator.onLine ? '服务端异常！' : '您断网了！'
		}
		// 错误消息提示
		Message.error(msg)
	}

	/**
	 * 错误处理 - code级别
	 *
	 * @param {response}
	 * @memberof ErrorClass
	 */
	responseHandle(response: IOption) {
		const { code, message } = response.data
		// 错误消息提示
		code !== 0 && Message.error(message || '接口出错！')
	}
}

export default new ErrorClass()
